﻿using System;
using System.Collections.Generic;
using System.Text;
using METODESA.Server.Data.Exceptions;
using METODESA.Server.Data.METODESA.Entity;
using NHibernate;


namespace METODESA.Server.Data.METODESA.Nhibernate
{
   public class EmpleadoDao:BaseDao
    {

        public static IList<Empleado> getAllEmpleado()
        {

            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                return myISession.CreateCriteria(typeof(Empleado)).List<Empleado>();
            }
            catch (Exception e)
            {
                throw new EmpleadoNotExistsException("There's no empleado");
                return null;

            }

        }

        public static Empleado getEmpleadoById(int id)
        {
            Empleado empleado = null;
            Boolean flag = true;
            myISession = NHibernateHelper.GetCurrentSession();

            try
            {
                empleado = (Empleado)myISession.Load(typeof(Empleado), id);
                flag = false;
            }
            catch (HibernateException e)
            {
                throw new EmpleadoNotExistsException("There's no empleado with the provided id");

            }

            if (flag)
            {
                
                return null;
            }

            return empleado;
        }


        public static IList<Empleado> GetEmpleadoByCedula(string cedula)
        {

            Boolean flag = true;

            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(Empleado));
                myCriteria.Add(NHibernate.Expression.Expression.Eq("Cedula", cedula));
                IList<Empleado> empleados = myCriteria.List<Empleado>();
                return empleados;
            }
            catch (Exception e)
            {
                throw new EmpleadoNotExistsException("There's no empleado with the provided ci");
                return null;
            }

        }

        // Muestra empleados por Nombre
        public static IList<Empleado> GetEmpleadoByName(String name)
        {

            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(Empleado));
                myCriteria.Add(NHibernate.Expression.Expression.Like("Nombre",'%'+name+'%'));
                IList<Empleado> empleados = myCriteria.List<Empleado>();
                return empleados;
            }
            catch (Exception e)
            {
                throw new EmpleadoNotExistsException("There's no empleado with the provided name");
                return null;
            }
        }

        // Muestra empleados por Apellido
        public static IList<Empleado> GetEmpleadoByLastName(String lastName)
        {

            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(Empleado));
                myCriteria.Add(NHibernate.Expression.Expression.Like("Apellido",'%'+lastName+'%'));
                IList<Empleado> empleados = myCriteria.List<Empleado>();
                return empleados;
            }
            catch (Exception e)
            {
                throw new EmpleadoNotExistsException("There's no empleado with the provided lastname");
                return null;
            }
        }
        public static IList<Empleado> GetEmpleadoByLogin(String login)
        {

            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(Empleado));
                myCriteria.Add(NHibernate.Expression.Expression.Like("Login", login));
                IList<Empleado> empleados = myCriteria.List<Empleado>();
                return empleados;
            }
            catch (Exception e)
            {
                throw new EmpleadoNotExistsException("There's no empleado with the provided Login");
                return null;
            }
        }

        public static IList<Empleado> GetEmpleadoByType(string type)
        {

            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(Empleado));
                myCriteria.Add(NHibernate.Expression.Expression.Like("Tipo", type));
                IList<Empleado> empleados = myCriteria.List<Empleado>();
                return empleados;
            }
            catch (Exception e)
            {
                throw new EmpleadoNotExistsException("There's no empleado with the provided Type");
                return null;
            }
        }
        // toma como parametro el login y el password desencriptado
        public static Empleado GetEmpleadoByUser(string login, string password)
        {

            Boolean flag = true;

            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(Empleado));
                Empleado empleado;
                myCriteria.Add(NHibernate.Expression.Expression.Eq("Login", login));
                myCriteria.Add(NHibernate.Expression.Expression.Eq("Pass", password));
                IList<Empleado> empleados = myCriteria.List<Empleado>();
                if (empleados.Count == 1)
                {
                    return empleados[0];

                }
                else
                {
                    return null;
                }
                
                
            }
            catch (Exception e)
            {
                throw new EmpleadoNotExistsException("There's no empleado with the provided login y pass");
                return null;
            }

        }

      
   }
}
